package crc

func CRC16Get(data []byte) uint16 {
	var crc uint16 = 0xFFFF
	for _, v := range data {
		crc = crc ^ uint16(v)
		for i := 0; i < 8; i++ {
			if crc&1 == 1 {
				crc = (crc >> 1) ^ 0xA001
			} else {
				crc = crc >> 1
			}
		}
	}
	return crc
}

func Crc16Check(data []byte) bool {
	crc := CRC16Get(data[:len(data)-2])
	return crc == (uint16(data[len(data)-2]) | uint16(data[len(data)-1])<<8)
}

func Crc16Add(data []byte) []byte {
	crc := CRC16Get(data)
	return append(data, byte(crc&0xFF), byte(crc>>8))
}
